//============================================================================================
/**
 * @file	phclink_pokeselect.c
 * @brief	ＰＨＣ−ＤＳ接続画面 ポケモン選択画面 【シーケンス】
 * @author	Akito Mori
 * @date	09.02.02
 */
//============================================================================================
#include "common.h"
#include "gflib/touchpanel.h"
#include "system/gamedata.h"
#include "system/procsys.h"
#include "system/main.h"
#include "system/fontproc.h"
#include "system/window.h"
#include "system/pmfprint.h"
#include "system/snd_tool.h"
#include "system/arc_tool.h"
#include "system/arc_util.h"
#include "system/clact_tool.h"
#include "system/clact_util.h"
#include "system/msgdata.h"
#include "system/wordset.h"
#include "system/mystatus.h"
#include "system/wipe.h"
#include "savedata/config.h"
#include "itemtool/item.h"
#include "itemtool/myitem.h"
#include "msgdata/msg.naix"

#include "application/phclink.h"
#include "phclink_obj_def.h"
#include "phclink_bmp_def.h"
#include "phclink_local.h"
#include "phclink_obj.h"
#include "phclink_bmp.h"
#include "phc_ds.naix"
#include "application/poke_select.h"

enum{
	SUBSEQ_ERROR_INIT=0,
	SUBSEQ_ERROR_WAIT,
	SUBSEQ_ERROR_END,
};

enum {
	POKE_SELECT_SCREEN_INIT=0,	///< 初期化
	POKE_SELECT_POKE_ICON_SET,	///< ポケモンアイコンセット
	POKE_SELECT_WIPE_IN_WAIT,	///< ワイプ待ち
	POKE_SELECT_MAIN,			///< メイン
	POKE_SELECT_END,			///< 終了
	POKE_SELECT_BLACK_OUT_WAIT,	///< フェードアウト待ち
};



//** CharManager PlttManager用 **//
#define CHAR_CONT_NUM				(40)		///< セルアクター総数
#define CHAR_VRAMTRANS_MAIN_SIZE	(64*1024)	///< メインVRAM占有サイズ
#define CHAR_VRAMTRANS_SUB_SIZE		(16*1024)	///< サブVRAM占有サイズ
#define PLTT_CONT_NUM				(20)		///< パレットマネージャーに渡す数

#define BOX_NUM_MAX					(18)		///< ボックスの数（ボックス＋手持ち）

static void InitOAM(PHC_POKE_SEL_WORK *work);
static void InitCharPlttManager(void);
static void SetUpBGSys(GF_BGL_INI * ini);
static void SetVRAMBank(void);
static BOOL GetBoxPokeData(void *pBoxData, const int inBoxNum, const int inIndex, BOX_POKE_DATA *outData );
static BOOL GetBoxPokeData2(void *pBoxData, const int inBoxNum, const int inIndex, BOX_POKE_DATA *outData );
static void GetBoxName(STRBUF * msg, void *pBoxData, int inBoxNumber);
static void VBlankFunc( void * work );
static void SetResultData(PHC_POKE_SEL_WORK *psel, PHCLINK_WORK *wk );
static void	 CallbackFunc( int inBoxIdx, int inBoxPos, void *CallBackWk );

//==============================================================================
/**
 * @brief   ポケモン選択画面初期化
 *
 * @param   wk		PHC画面ワーク
 *
 * @retval  アプリシーケンスNO
 */
//==============================================================================
int PhcLink_SeqPokeSelect_Init( PHCLINK_WORK *wk )
{
	PHC_POKE_SEL_WORK *work = &wk->phcsel;

	switch(work->Seq){
	case 0:
		// BG,OAM設定状態解放
		PhcLink_ResourceExit( wk );
		work->Seq = 1;
		break;

	case 1:
		//BGLアロケーション
		wk->bgl = GF_BGL_BglIniAlloc(HEAPID_PHC_LINK);

		SetVRAMBank();

		//ポケモン選択画面用ワーク確保
		wk->phcsel.PokeSelPtr = POKESEL_Alloc( HEAPID_PHC_LINK, POKEMON_SELECT_MAX, BOX_NUM_MAX );
		//上画面コントローラアロケーション
		wk->phcsel.SubCntPtr = PhcLnkSelSub_Alloc(HEAPID_PHC_LINK);
		//ＢＧセットアップ
		SetUpBGSys(wk->bgl);
		//キャラ・パレットマネージャ初期化
		InitCharPlttManager();
		//ＯＡＭ初期化
		InitOAM(&wk->phcsel);

		wk->phcsel.Seq = 0;

		//ポケモン選択画面アプリ初期化
		POKESEL_Init( wk->phcsel.PokeSelPtr, wk->bgl,
				SaveData_GetBoxData( wk->savedata ),
				SaveData_GetTemotiPokemon( wk->savedata ),
				FALSE, FALSE,
				TRUE,
				0,
				GetBoxPokeData2,
				GetBoxName,
				wk->phcsel.SelectResult,
				CallbackFunc,			// 現在選択しているポケモンの情報を取得するコールバック関数
				wk);	// ↑カーソル移動時などに対応

		{
			//上画面初期化
			PhcLnkSelSub_Init( wk->phcsel.SubCntPtr, wk->bgl );
		}

		//Ｖブランク関数実行開始
		sys_VBlankFuncChange( VBlankFunc, &wk->phcsel );
		work->Seq = 0;
		return SEQ_MAINSEQ_MAIN;
		break;
	}

	OS_Printf("PhcLink_SeqPokeSelect_Init\n");
	return SEQ_MAINSEQ_INIT;
}

//==============================================================================
/**
 * @brief   ポケモン選択画面メイン
 *
 * @param   wk		PHC画面ワーク
 *
 * @retval  アプリシーケンスNO
 */
//==============================================================================
int PhcLink_SeqPokeSelect_Main( PHCLINK_WORK *wk )
{

	int selno, seltype;

	PHC_POKE_SEL_WORK *work = &wk->phcsel;
//	OS_Printf("ポケモン選択画面メイン\n");
	switch(work->Seq){
	case POKE_SELECT_SCREEN_INIT:
		work->Seq = POKE_SELECT_POKE_ICON_SET;
		break;
	case POKE_SELECT_POKE_ICON_SET:
		//ワイプスタート
		WIPE_SYS_Start(WIPE_PATTERN_WMS, WIPE_TYPE_FADEIN, WIPE_TYPE_FADEIN,
				WIPE_FADE_BLACK,WIPE_DEF_DIV,WIPE_DEF_SYNC,HEAPID_PHC_LINK);
		work->Seq = POKE_SELECT_WIPE_IN_WAIT;
		break;
	case POKE_SELECT_WIPE_IN_WAIT:		//ワイプ待ち
		if ( WIPE_SYS_EndCheck() ){
			work->Seq = POKE_SELECT_MAIN;
		}
		break;
	case POKE_SELECT_MAIN:
		{
			SELECT_MAIN_RC rc;
			//OS_Printf("メイン処理中\n");
			rc = POKESEL_Main(work->PokeSelPtr);
			if ( rc == SELECT_MAIN_RC_END ){
				work->SelectCancel = FALSE;
				work->Seq = POKE_SELECT_END;
			}else if ( rc == SELECT_MAIN_RC_CANCEL ){
				work->SelectCancel = TRUE;
				work->Seq = POKE_SELECT_END;
			}
		}
		break;
	case POKE_SELECT_END:
		//ブラックアウト
		WIPE_SYS_Start(WIPE_PATTERN_WMS, WIPE_TYPE_FADEOUT, WIPE_TYPE_FADEOUT,
				WIPE_FADE_BLACK,WIPE_DEF_DIV,WIPE_DEF_SYNC,HEAPID_PHC_LINK);
		work->Seq = POKE_SELECT_BLACK_OUT_WAIT;
		break;
	case POKE_SELECT_BLACK_OUT_WAIT:
		if ( WIPE_SYS_EndCheck() ){
			OS_Printf("選択終了\n");
			//親アプリに選択結果を格納
			SetResultData(work, wk);
			OS_Printf("monsno = %d, form=%d, \n", work->monsno, work->form);
			return SEQ_MAINSEQ_END;
		}
		break;
	}

	//ポケモン選択
	//描画
	POKESEL_Draw(work->PokeSelPtr);
	PhcLnkSelSub_Draw(work->SubCntPtr);
//	OS_Printf("PhcLink_SeqPokeSelect_Main\n");
//	if(sys.trg & PAD_KEY_DOWN){
//		wk->mainseq_next = MAINSEQ_MAP_SELECT;
//		return SEQ_MAINSEQ_END;
//	}
	return SEQ_MAINSEQ_MAIN;
}
//==============================================================================
/**
 * @brief   ポケモン選択画面終了
 *
 * @param   wk		PHC画面ワーク
 *
 * @retval  アプリシーケンスNO
 */
//==============================================================================
int PhcLink_SeqPokeSelect_End( PHCLINK_WORK *wk )
{
	// 次回の選択アプリ起動用に初期化しておく
	wk->phcsel.Seq = 0;

	//Ｖブランク関数停止
	sys_VBlankFuncChange( NULL, NULL );

	//ポケモン選択画面用ワーク解放
	POKESEL_Free( wk->phcsel.PokeSelPtr );
	//上画面コントローラ解放
	PhcLnkSelSub_Free(wk->phcsel.SubCntPtr);

	//OAMレンダラー破棄
	REND_OAM_Delete();
	// リソース解放
	DeleteCharManager();
	DeletePlttManager();

	//BGL解放
	sys_FreeMemoryEz(wk->bgl);


	// BG,OAM設定状態再設定
	PhcLink_ResourceInit( wk );

	OS_Printf("PhcLink_SeqPokeSelect_End\n");

	if(wk->phcsel.SelectCancel == TRUE){
		// 送受信画面へ
		wk->mainseq_next = MAINSEQ_START;
	}else{
		// 送受信画面へ
		wk->mainseq_next = MAINSEQ_SENDRECV;
	}

	return SEQ_MAINSEQ_INIT;
}




//----------------------------------------------------------------------------
/**
 *	@brief	VRAM割り当て
 *
 *	@param	none
 *
 *	@return none
 */
//-----------------------------------------------------------------------------
static void SetVRAMBank(void)
{
	GF_BGL_DISPVRAM tbl = {
		GX_VRAM_BG_128_A,				// メイン2DエンジンのBG
		GX_VRAM_BGEXTPLTT_NONE,			// メイン2DエンジンのBG拡張パレット

		GX_VRAM_SUB_BG_128_C,			// サブ2DエンジンのBG
		GX_VRAM_SUB_BGEXTPLTT_NONE,		// サブ2DエンジンのBG拡張パレット

		GX_VRAM_OBJ_64_E,				// メイン2DエンジンのOBJ
		GX_VRAM_OBJEXTPLTT_NONE,		// メイン2DエンジンのOBJ拡張パレット

		GX_VRAM_SUB_OBJ_16_I,			// サブ2DエンジンのOBJ
		GX_VRAM_SUB_OBJEXTPLTT_NONE,	// サブ2DエンジンのOBJ拡張パレット

		GX_VRAM_TEX_0_B,				// テクスチャイメージスロット
		GX_VRAM_TEXPLTT_01_FG			// テクスチャパレットスロット
	};

	GF_Disp_SetBank( &tbl );

}

//----------------------------------------------------------------------------
/**
 *	@brief	BGシステムセットアップ
 *
 *	@param	ini		BGL
 *
 *	@return none
 */
//-----------------------------------------------------------------------------
static void SetUpBGSys(GF_BGL_INI * ini)
{
	{	/* BG SYSTEM */
    	GF_BGL_SYS_HEADER BGsys_data = {
      		GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BGMODE_0, GX_BG0_AS_2D,
    	};
    	GF_BGL_InitBG( &BGsys_data );
  	};
}

//------------------------------------------------------------------
/**
 * @brief	キャラクタ、パレットのマネージャー起動
 * @param	none
 * @return	none
 */
//------------------------------------------------------------------
static void InitCharPlttManager(void)
{
	// キャラクタマネージャー初期化
	{
		CHAR_MANAGER_MAKE cm = {
			CHAR_CONT_NUM,
			CHAR_VRAMTRANS_MAIN_SIZE,
			CHAR_VRAMTRANS_SUB_SIZE,
			HEAPID_PHC_LINK,
		};
		InitCharManager(&cm);
	}
	// パレットマネージャー初期化
	InitPlttManager(PLTT_CONT_NUM, HEAPID_PHC_LINK );

	// 読み込み開始位置を初期化
	CharLoadStartAll();
	PlttLoadStartAll();
}

//------------------------------------------------------------------
/**
 * @brief	OAMの初期化
 * @param	NONE
 * @return	NONE
 */
//------------------------------------------------------------------
static void InitOAM( PHC_POKE_SEL_WORK *work)
{
	// OAMマネージャーの初期化
	NNS_G2dInitOamManagerModule();
	// 共有OAMマネージャ作成
	// レンダラ用OAMマネージャ作成
	// ここで作成したOAMマネージャをみんなで共有する
	REND_OAMInit(
			0, 126,		// メイン画面OAM管理領域
			0, 32,		// メイン画面アフィン管理領域
			0, 126,		// サブ画面OAM管理領域
			0, 32,		// サブ画面アフィン管理領域
			HEAPID_PHC_LINK);
}


//----------------------------------------------------------------------------
/**
 *	@brief	ボックスのポケモンデータ取得
 *
 *	@param	*pBoxData		ボックスデータ
 *	@param	int inBoxNum	ボックスナンバー
 *	@param	int inIndex		インデックス
 *	@param	*outData 		データ格納バッファ
 *
 *	@return	BOOL			存在したか？		TRUE:存在した	FALSE:存在しない
 */
//-----------------------------------------------------------------------------
static BOOL GetBoxPokeData(void *pBoxData, const int inBoxNum, const int inIndex, BOX_POKE_DATA *outData )
{
	int exist;
	BOOL rc;
	BOX_DATA *box_data = (BOX_DATA*)pBoxData;
	POKEMON_PASO_PARAM* param = BOXDAT_GetPokeDataAddress( box_data, inBoxNum, inIndex );

	//存在を確認
	exist = PokePasoParaGet(param, ID_PARA_poke_exist, NULL);
	if (exist){
		//モンスターナンバー
		outData->MonsNo = PokePasoParaGet(param, ID_PARA_monsno, NULL);
		//個性乱数
		outData->PsnlRnd = PokePasoParaGet(param, ID_PARA_personal_rnd, NULL);
		//卵フラグ
		outData->Egg = PokePasoParaGet(param, ID_PARA_tamago_flag, NULL);
		//フォルム
		outData->Form = PokePasoParaGet(param, ID_PARA_form_no, NULL);
		MORI_PRINT("bos:monsno=%d, form=%d\n",outData->MonsNo,outData->Form );
		//アイテム
		outData->Item = PokePasoParaGet(param, ID_PARA_item, NULL);
		//カスタムボール
		outData->Ball = 0;	//カスタムボールを表示しない
		//ニックネーム
		PokePasoParaGet(param, ID_PARA_nickname, outData->NickName);
		//レア
		outData->Rare = PokePasoRareGet(param);
		//性別
		outData->Sex = PokePasoParaGet(param, ID_PARA_sex, NULL);
		//レベル
		outData->Level = PokePasoParaGet(param, ID_PARA_level, NULL);
		//マーキング
		outData->Mark = PokePasoParaGet(param, ID_PARA_mark, NULL);
		rc = TRUE;
//		*ppp = param;
	}else{
		//モンスターナンバー
		outData->MonsNo = 0;
		//個性乱数
		outData->PsnlRnd = 0;
		//卵フラグ
		outData->Egg = 0;
		//フォルム
		outData->Form = 0;
		//アイテム
		outData->Item = 0;
		//カスタムボール
		outData->Ball = 0;
		//レア
		outData->Rare = 0;
		//性別
		outData->Sex = 0;
		rc = FALSE;
	}
	return rc;
}

//----------------------------------------------------------------------------
/**
 *	@brief	ボックスのポケモンデータ取得(アイコン展開用)
 *
 *	@param	*pBoxData		ボックスデータ
 *	@param	int inBoxNum	ボックスナンバー
 *	@param	int inIndex		インデックス
 *	@param	*outData 		データ格納バッファ
 *
 *	@return	BOOL			存在したか？		TRUE:存在した	FALSE:存在しない
 */
//-----------------------------------------------------------------------------
static BOOL GetBoxPokeData2(void *pBoxData, const int inBoxNum, const int inIndex, BOX_POKE_DATA *outData )
{
	int exist;
	BOOL rc;
	BOX_DATA *box_data = (BOX_DATA*)pBoxData;
	POKEMON_PASO_PARAM* param = BOXDAT_GetPokeDataAddress( box_data, inBoxNum, inIndex );

	//存在を確認
	exist = PokePasoParaGet(param, ID_PARA_poke_exist, NULL);
	if (exist){
		//モンスターナンバー
		outData->MonsNo = PokePasoParaGet(param, ID_PARA_monsno, NULL);
		//個性乱数
		outData->PsnlRnd = 0;
		//卵フラグ
		outData->Egg = PokePasoParaGet(param, ID_PARA_tamago_flag, NULL);
		//フォルム
		outData->Form = PokePasoParaGet(param, ID_PARA_form_no, NULL);
		MORI_PRINT("bos:monsno=%d, form=%d\n",outData->MonsNo,outData->Form );
		//アイテム
		outData->Item = 0;	//アイテムを表示しない
		//カスタムボール
		outData->Ball = 0;	//カスタムボールを表示しない
		//レア
		outData->Rare = 0;
		//性別
		outData->Sex = 0;
		//レベル
		outData->Level = 0;
		//マーキング
		outData->Mark = 0;
		rc = TRUE;
//		*ppp = param;
	}else{
		//モンスターナンバー
		outData->MonsNo = 0;
		//個性乱数
		outData->PsnlRnd = 0;
		//卵フラグ
		outData->Egg = 0;
		//フォルム
		outData->Form = 0;
		//アイテム
		outData->Item = 0;
		//カスタムボール
		outData->Ball = 0;
		//レア
		outData->Rare = 0;
		//性別
		outData->Sex = 0;
		//レベル
		outData->Level = 0;
		//マーキング
		outData->Mark = 0;
		rc = FALSE;
	}
	return rc;
}


//----------------------------------------------------------------------------
/**
 *	@brief	ボックス名取得
 *
 *	@param	* msg			メッセージバッファ
 *	@param	*pBoxData		ボックスデータ
 *	@param	inBoxNumber		ボックスナンバー
 *
 *	@return	none
 */
//-----------------------------------------------------------------------------
static void GetBoxName(STRBUF * msg, void *pBoxData, int inBoxNumber)
{
	BOXDAT_GetBoxName( pBoxData, inBoxNumber, msg );
}

//----------------------------------------------------------------------------
/**
 *	@brief	Vブランク関数
 *
 *	@param	work 	ワーク
 *
 *	@return	none
 */
//-----------------------------------------------------------------------------
static void VBlankFunc( void * work )
{
   PHC_POKE_SEL_WORK *wk = (PHC_POKE_SEL_WORK *)work;

   POKESEL_DefaultVBlankCallFunc(wk->PokeSelPtr);
}


//----------------------------------------------------------------------------
/**
 *	@brief	選択結果セット
 *
 *	@param	*work			ポケモン選択ワークポインタ
 *	@param	*pLinkData		ポケスロンとの接続データポインタ
 *
 *	@return	none
 */
//-----------------------------------------------------------------------------
static void SetResultData(PHC_POKE_SEL_WORK *psel, PHCLINK_WORK *wk )
{
	int i=0;

	if (psel->SelectCancel){
		OS_Printf("キャンセルしたのでデータセットをスルー\n");
		return ;
	}

	//モンスター情報を取得
	if ( psel->SelectResult[i].BoxIdx == MYPARTY_BOX ){
		POKEMON_PARAM* param;
		param = PokeParty_GetMemberPointer(SaveData_GetTemotiPokemon( wk->savedata ),
											psel->SelectResult[i].BoxPos);
		//モンスターナンバー
		psel->monsno = PokeParaGet(param, ID_PARA_monsno, NULL);
		//フォルムナンバー
		psel->form = PokeParaGet(param, ID_PARA_form_no, NULL);
		//ニックネーム
		PokeParaGet( param, ID_PARA_nickname, psel->monsname );
		//レア
		psel->rare = PokeRareGet(param);
		//性別
		psel->sex = PokeParaGet(param, ID_PARA_sex, NULL);
		wk->pp = param;
		wk->ppp = NULL;
	}else{
		BOX_POKE_DATA data;
		POKEMON_PASO_PARAM* param = BOXDAT_GetPokeDataAddress( SaveData_GetBoxData( wk->savedata ),
									psel->SelectResult[i].BoxIdx, psel->SelectResult[i].BoxPos );
		if(PokePasoParaGet(param, ID_PARA_poke_exist, NULL)){
			wk->ppp = param;
			wk->pp  = NULL;
		}

		GetBoxPokeData(SaveData_GetBoxData( wk->savedata ),
				psel->SelectResult[i].BoxIdx, psel->SelectResult[i].BoxPos, &data );
		//モンスターナンバー
		psel->monsno = data.MonsNo;
		//フォルムナンバー
		psel->form = data.Form;
		//ニックネーム
		PM_strncpy( psel->monsname, data.NickName, MONS_NAME_SIZE+EOM_SIZE );
		//レア
		psel->rare = data.Rare;
		//性別
		psel->sex = data.Sex;


	}
}

//----------------------------------------------------------------------------
/**
 *	@brief	選択アプリコールバック関数
 *
 *  @param	inBoxIdx	現在の指定ボックス
 *	@param	inBoxPos	現在いるボックス内位置
 *	@param	CallBackWk	PHC画面ワーク
 *
 *	@return	none
 */
//-----------------------------------------------------------------------------
static void	 CallbackFunc( int inBoxIdx, int inBoxPos, void *CallBackWk )
{
	u8 i;
	PLNKS_REDRAW_INFO info;
	PHCLINK_WORK *work;
	PHC_POKE_SEL_WORK *sel_work;

	int mark;

	OS_Printf("コールバックされた %d,%d\n",inBoxIdx,inBoxPos);

	work = (PHCLINK_WORK *)CallBackWk;
	sel_work = &work->phcsel;

	if ( (inBoxIdx != -1)&&(inBoxPos != -1) ){
		info.ReDraw = PLNKS_REDRAW_UPDATE;
		//ポケ表示
		if (inBoxIdx == MYPARTY_BOX){	//手持ち
			POKEMON_PARAM* param;
			POKEPARTY *party;
			party = SaveData_GetTemotiPokemon( work->savedata );
			param = PokeParty_GetMemberPointer( party, inBoxPos);
			//個性乱数
			info.PsnlRnd = PokeParaGet(param, ID_PARA_personal_rnd, NULL);
			//モンスターナンバー
			info.MonsNo = PokeParaGet(param, ID_PARA_monsno, NULL);
			//フォルムナンバー
			info.Form = PokeParaGet(param, ID_PARA_form_no, NULL);
			//ニックネーム
			PokeParaGet( param, ID_PARA_nickname, info.NickName );
			//レア
			info.Rare = PokeRareGet(param);
			//性別
			info.Sex = PokeParaGet(param, ID_PARA_sex, NULL);
			//マーキング情報
			mark = PokeParaGet(param, ID_PARA_mark, NULL);
			for (i=0;i<MARKING_MAX;i++){
				if ( (mark >> i)&0x1 ){
					info.Marking[i] = 1;
				}else{
					info.Marking[i] = 0;
				}
			}
			//持ち物
			info.Item = PokeParaGet(param, ID_PARA_item, NULL);
			//レベル
			info.Level = PokeParaGet(param, ID_PARA_level, NULL);
			PhcLnkSelSub_ReDraw(sel_work->SubCntPtr, &info);
		}else{							//ボックス
			BOX_POKE_DATA data;
			GetBoxPokeData(SaveData_GetBoxData( work->savedata ),
					inBoxIdx, inBoxPos, &data );
			//個性乱数
			info.PsnlRnd = data.PsnlRnd;
			//モンスターナンバー
			info.MonsNo = data.MonsNo;
			//フォルムナンバー
			info.Form = data.Form;
			//ニックネーム
			PM_strncpy( info.NickName, data.NickName, MONS_NAME_SIZE+EOM_SIZE );
			//レア
			info.Rare = data.Rare;
			//性別
			info.Sex = data.Sex;
			//マーキング情報
			mark = data.Mark;
			for (i=0;i<MARKING_MAX;i++){
				if ( (mark >> i)&0x1 ) {
					info.Marking[i] = 1;
				}else{
					info.Marking[i] = 0;
				}
			}
			//持ち物
			info.Item = data.Item;
			//レベル
			info.Level = data.Level;

			PhcLnkSelSub_ReDraw(sel_work->SubCntPtr, &info);
		}
	}else{
		//情報なし
		info.ReDraw = PLNKS_REDRAW_CLEAR;
		PhcLnkSelSub_ReDraw(sel_work->SubCntPtr, &info);
	}
}